<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
    <title>Penlight Documentation</title>
    <link rel="stylesheet" href="../ldoc_fixed.css" type="text/css" />
</head>
<body>

<div id="container">

<div id="product">
	<div id="product_logo"></div>
	<div id="product_name"><big><b></b></big></div>
	<div id="product_description"></div>
</div> <!-- id="product" -->


<div id="main">


<!-- Menu -->

<div id="navigation">
<br/>
<h1>Penlight</h1>

<ul>
  <li><a href="https://github.com/lunarmodules/Penlight">GitHub Project</a></li>
  <li><a href="../index.html">Documentation</a></li>
</ul>

<h2>Contents</h2>
<ul>
<li><a href="#Functions">Functions</a></li>
</ul>


<h2>Libraries</h2>
<ul class="nowrap">
  <li><a href="../libraries/pl.html">pl</a></li>
  <li><a href="../libraries/pl.app.html">pl.app</a></li>
  <li><a href="../libraries/pl.array2d.html">pl.array2d</a></li>
  <li><a href="../libraries/pl.class.html">pl.class</a></li>
  <li><a href="../libraries/pl.compat.html">pl.compat</a></li>
  <li><a href="../libraries/pl.comprehension.html">pl.comprehension</a></li>
  <li><a href="../libraries/pl.config.html">pl.config</a></li>
  <li><a href="../libraries/pl.data.html">pl.data</a></li>
  <li><a href="../libraries/pl.dir.html">pl.dir</a></li>
  <li><a href="../libraries/pl.file.html">pl.file</a></li>
  <li><a href="../libraries/pl.func.html">pl.func</a></li>
  <li><a href="../libraries/pl.import_into.html">pl.import_into</a></li>
  <li><a href="../libraries/pl.input.html">pl.input</a></li>
  <li><a href="../libraries/pl.lapp.html">pl.lapp</a></li>
  <li><a href="../libraries/pl.lexer.html">pl.lexer</a></li>
  <li><a href="../libraries/pl.luabalanced.html">pl.luabalanced</a></li>
  <li><a href="../libraries/pl.operator.html">pl.operator</a></li>
  <li><a href="../libraries/pl.path.html">pl.path</a></li>
  <li><a href="../libraries/pl.permute.html">pl.permute</a></li>
  <li><a href="../libraries/pl.pretty.html">pl.pretty</a></li>
  <li><a href="../libraries/pl.seq.html">pl.seq</a></li>
  <li><a href="../libraries/pl.sip.html">pl.sip</a></li>
  <li><a href="../libraries/pl.strict.html">pl.strict</a></li>
  <li><a href="../libraries/pl.stringio.html">pl.stringio</a></li>
  <li><a href="../libraries/pl.stringx.html">pl.stringx</a></li>
  <li><a href="../libraries/pl.tablex.html">pl.tablex</a></li>
  <li><a href="../libraries/pl.template.html">pl.template</a></li>
  <li><a href="../libraries/pl.test.html">pl.test</a></li>
  <li><a href="../libraries/pl.text.html">pl.text</a></li>
  <li><strong>pl.types</strong></li>
  <li><a href="../libraries/pl.url.html">pl.url</a></li>
  <li><a href="../libraries/pl.utils.html">pl.utils</a></li>
  <li><a href="../libraries/pl.xml.html">pl.xml</a></li>
</ul>
<h2>Classes</h2>
<ul class="nowrap">
  <li><a href="../classes/pl.Date.html">pl.Date</a></li>
  <li><a href="../classes/pl.List.html">pl.List</a></li>
  <li><a href="../classes/pl.Map.html">pl.Map</a></li>
  <li><a href="../classes/pl.MultiMap.html">pl.MultiMap</a></li>
  <li><a href="../classes/pl.OrderedMap.html">pl.OrderedMap</a></li>
  <li><a href="../classes/pl.Set.html">pl.Set</a></li>
</ul>
<h2>Manual</h2>
<ul class="nowrap">
  <li><a href="../manual/01-introduction.md.html">Introduction</a></li>
  <li><a href="../manual/02-arrays.md.html">Tables and Arrays</a></li>
  <li><a href="../manual/03-strings.md.html">Strings. Higher-level operations on strings.</a></li>
  <li><a href="../manual/04-paths.md.html">Paths and Directories</a></li>
  <li><a href="../manual/05-dates.md.html">Date and Time</a></li>
  <li><a href="../manual/06-data.md.html">Data</a></li>
  <li><a href="../manual/07-functional.md.html">Functional Programming</a></li>
  <li><a href="../manual/08-additional.md.html">Additional Libraries</a></li>
  <li><a href="../manual/09-discussion.md.html">Technical Choices</a></li>
</ul>
<h2>Examples</h2>
<ul class="nowrap">
  <li><a href="../examples/seesubst.lua.html">seesubst.lua</a></li>
  <li><a href="../examples/sipscan.lua.html">sipscan.lua</a></li>
  <li><a href="../examples/symbols.lua.html">symbols.lua</a></li>
  <li><a href="../examples/test-cmp.lua.html">test-cmp.lua</a></li>
  <li><a href="../examples/test-data.lua.html">test-data.lua</a></li>
  <li><a href="../examples/test-listcallbacks.lua.html">test-listcallbacks.lua</a></li>
  <li><a href="../examples/test-pretty.lua.html">test-pretty.lua</a></li>
  <li><a href="../examples/test-symbols.lua.html">test-symbols.lua</a></li>
  <li><a href="../examples/testclone.lua.html">testclone.lua</a></li>
  <li><a href="../examples/testconfig.lua.html">testconfig.lua</a></li>
  <li><a href="../examples/testglobal.lua.html">testglobal.lua</a></li>
  <li><a href="../examples/testinputfields.lua.html">testinputfields.lua</a></li>
  <li><a href="../examples/testinputfields2.lua.html">testinputfields2.lua</a></li>
  <li><a href="../examples/testxml.lua.html">testxml.lua</a></li>
  <li><a href="../examples/which.lua.html">which.lua</a></li>
</ul>

</div>

<div id="content">

<h1>Module <code>pl.types</code></h1>
<p>Dealing with Detailed Type Information</p>
<p>

</p>


<h2><a href="#Functions">Functions</a></h2>
<table class="function_list">
	<tr>
	<td class="name" nowrap><a href="#is_callable">is_callable (obj)</a></td>
	<td class="summary">is the object either a function or a callable object?.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#is_type">is_type (obj, tp)</a></td>
	<td class="summary">is the object of the specified type?.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#type">type (obj)</a></td>
	<td class="summary">a string representation of a type.</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#is_integer">is_integer (x)</a></td>
	<td class="summary">is this number an integer?</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#is_empty">is_empty (o, ignore_spaces)</a></td>
	<td class="summary">Check if the object is "empty".</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#is_indexable">is_indexable (val)</a></td>
	<td class="summary">is an object 'array-like'?</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#is_iterable">is_iterable (val)</a></td>
	<td class="summary">can an object be iterated over with <a href="https://www.lua.org/manual/5.1/manual.html#pdf-pairs">pairs</a>?</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#is_writeable">is_writeable (val)</a></td>
	<td class="summary">can an object accept new key/pair values?</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#to_bool">to_bool (o[, true_strs[, check_objs]])</a></td>
	<td class="summary">Convert to a boolean value.</td>
	</tr>
</table>

<br/>
<br/>


    <h2 class="section-header "><a name="Functions"></a>Functions</h2>

    <dl class="function">
    <dt>
    <a name = "is_callable"></a>
    <strong>is_callable (obj)</strong>
    </dt>
    <dd>
    is the object either a function or a callable object?.


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">obj</span>
         Object to check.
        </li>
    </ul>





</dd>
    <dt>
    <a name = "is_type"></a>
    <strong>is_type (obj, tp)</strong>
    </dt>
    <dd>
    is the object of the specified type?.
 If the type is a string, then use type, otherwise compare with metatable.</p>

<p> NOTE: this function is imported from <a href="../libraries/pl.utils.html#is_type">utils.is_type</a>.


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">obj</span>
         An object to check
        </li>
        <li><span class="parameter">tp</span>
         The expected type
        </li>
    </ul>



    <h3>See also:</h3>
    <ul>
         <a href="../libraries/pl.utils.html#is_type">utils.is_type</a>
    </ul>


</dd>
    <dt>
    <a name = "type"></a>
    <strong>type (obj)</strong>
    </dt>
    <dd>
    a string representation of a type.
 For tables and userdata with metatables, we assume that the metatable has a <code>_name</code>
 field. If the field is not present it will return 'unknown table' or
 'unknown userdata'.
 Lua file objects return the type 'file'.


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">obj</span>
         an object
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        a string like 'number', 'table', 'file' or 'List'
    </ol>




</dd>
    <dt>
    <a name = "is_integer"></a>
    <strong>is_integer (x)</strong>
    </dt>
    <dd>
    is this number an integer?


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">x</span>
         a number
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        boolean
    </ol>

    <h3>Raises:</h3>
    error if x is not a number



</dd>
    <dt>
    <a name = "is_empty"></a>
    <strong>is_empty (o, ignore_spaces)</strong>
    </dt>
    <dd>

<p>Check if the object is "empty".
 An object is considered empty if it is:</p>

<ul>
    <li><code>nil</code></li>
    <li>a table without any items (key-value pairs or indexes)</li>
    <li>a string with no content ("")</li>
    <li>not a nil/table/string</li>
</ul>



    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">o</span>
         The object to check if it is empty.
        </li>
        <li><span class="parameter">ignore_spaces</span>
         If the object is a string and this is true the string is
 considered empty if it only contains spaces.
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        <code>true</code> if the object is empty, otherwise a falsy value.
    </ol>




</dd>
    <dt>
    <a name = "is_indexable"></a>
    <strong>is_indexable (val)</strong>
    </dt>
    <dd>
    is an object 'array-like'?
 An object is array like if:</p>

<ul>
    <li>it is a table, or</li>
    <li>it has a metatable with <code>__len</code> and <code>__index</code> methods</li>
</ul>

<p> NOTE: since <code>__len</code> is 5.2+, on 5.1 is usually returns <code>false</code> for userdata


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">val</span>
         any value.
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        <code>true</code> if the object is array-like, otherwise a falsy value.
    </ol>




</dd>
    <dt>
    <a name = "is_iterable"></a>
    <strong>is_iterable (val)</strong>
    </dt>
    <dd>
    can an object be iterated over with <a href="https://www.lua.org/manual/5.1/manual.html#pdf-pairs">pairs</a>?
 An object is iterable if:</p>

<ul>
    <li>it is a table, or</li>
    <li>it has a metatable with a <code>__pairs</code> meta method</li>
</ul>

<p> NOTE: since <code>__pairs</code> is 5.2+, on 5.1 is usually returns <code>false</code> for userdata


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">val</span>
         any value.
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        <code>true</code> if the object is iterable, otherwise a falsy value.
    </ol>




</dd>
    <dt>
    <a name = "is_writeable"></a>
    <strong>is_writeable (val)</strong>
    </dt>
    <dd>

<p>can an object accept new key/pair values?
 An object is iterable if:</p>

<ul>
    <li>it is a table, or</li>
    <li>it has a metatable with a <code>__newindex</code> meta method</li>
</ul>




    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">val</span>
         any value.
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        <code>true</code> if the object is writeable, otherwise a falsy value.
    </ol>




</dd>
    <dt>
    <a name = "to_bool"></a>
    <strong>to_bool (o[, true_strs[, check_objs]])</strong>
    </dt>
    <dd>

<p>Convert to a boolean value.
 True values are:</p>

<ul>
    <li>boolean: true.</li>
    <li>string: 'yes', 'y', 'true', 't', '1' or additional strings specified by <code>true_strs</code>.</li>
    <li>number: Any non-zero value.</li>
    <li>table: Is not empty and <code>check_objs</code> is true.</li>
    <li>everything else: Is not <code>nil</code> and <code>check_objs</code> is true.</li>
</ul>




    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">o</span>
         The object to evaluate.
        </li>
        <li><span class="parameter">true_strs</span>
         optional Additional strings that when matched should evaluate to true. Comparison is case insensitive.
 This should be a List of strings. E.g. "ja" to support German.
         (<em>optional</em>)
        </li>
        <li><span class="parameter">check_objs</span>
         True if objects should be evaluated.
         (<em>optional</em>)
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        true if the input evaluates to true, otherwise false.
    </ol>




</dd>
</dl>


</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>
